#ifndef DWARF__HIGH_PC_H
#define DWARF__HIGH_PC_H

#include <libdwarf/libdwarf.h>

namespace dwarf {

class HighPc {
public:
	enum Type {
		TYPE_UNDEFINED,
		TYPE_ADDRESS,
		TYPE_OFFSET
	};

	class TypeUndefined {
	};

	class TypeAddress {
	};

	class TypeOffset {
	};

	union Value {
		Dwarf_Addr address_;
		Dwarf_Unsigned offset_;
	};
private:
	Type type_;
	Value value_;
public:
	HighPc(TypeUndefined _typeUndefined);
	HighPc(TypeAddress _typeAddress, Dwarf_Addr _address);
	HighPc(TypeOffset _typeOffset, Dwarf_Unsigned _offset);
	HighPc(const HighPc &_highPc);
	~HighPc();
public:
	Type getType() const;
	Dwarf_Addr getAddress() const;
	Dwarf_Unsigned getOffset() const;
};

}

#endif // DWARF__HIGH_PC_H
